package com.gitee.qdbp.general.system.api.personnel.basic;

import java.util.List;
import com.gitee.qdbp.able.exception.ServiceException;
import com.gitee.qdbp.able.jdbc.ordering.OrderPaging;
import com.gitee.qdbp.able.jdbc.paging.PageList;
import com.gitee.qdbp.general.system.api.personnel.model.DepartmentCoreBean;
import com.gitee.qdbp.general.system.api.personnel.model.DepartmentCoreUpdate;
import com.gitee.qdbp.general.system.api.personnel.model.DepartmentCoreWhere;

/**
 * 部门信息基础业务类
 *
 * @author zhh
 * @version 170712
 */
public interface IDepartmentCoreBasic {

    /**
     * 部门信息查询
     *
     * @param where 查询条件
     * @return 部门信息
     * @throws ServiceException 查询失败
     */
    DepartmentCoreBean find(DepartmentCoreWhere where) throws ServiceException;

    /**
     * 根据部门ID查询部门信息
     *
     * @param id 部门ID
     * @return 部门信息
     * @throws ServiceException 查询失败
     */
    DepartmentCoreBean findById(String id) throws ServiceException;

    /**
     * 根据部门编号查询部门信息
     *
     * @param deptCode 部门编号
     * @return 部门信息
     * @throws ServiceException 查询失败
     */
    DepartmentCoreBean findByDeptCode(String deptCode) throws ServiceException;

    /**
     * 部门信息查询
     *
     * @param paging 排序分页条件
     * @return 部门信息列表
     * @throws ServiceException 查询失败
     */
    PageList<DepartmentCoreBean> list(OrderPaging paging) throws ServiceException;

    /**
     * 部门信息查询
     *
     * @param where 查询条件
     * @param paging 排序分页条件
     * @return 部门信息列表
     * @throws ServiceException 查询失败
     */
    PageList<DepartmentCoreBean> list(DepartmentCoreWhere where, OrderPaging paging) throws ServiceException;

    /**
     * 根据部门ID查询部门信息列表
     *
     * @param ids 部门ID列表
     * @return 部门信息列表
     * @throws ServiceException 查询失败
     */
    PageList<DepartmentCoreBean> listByIds(List<String> ids) throws ServiceException;

    /**
     * 根据部门编号查询部门信息列表
     *
     * @param deptCodes 部门编号列表
     * @return 部门信息列表
     * @throws ServiceException 查询失败
     */
    PageList<DepartmentCoreBean> listByCodes(List<String> deptCodes) throws ServiceException;

    /**
     * 创建部门信息
     *
     * @param model 待新增的部门信息
     * @return 受影响行数
     * @throws ServiceException 创建失败
     */
    int create(DepartmentCoreBean model) throws ServiceException;

    /**
     * 批量创建部门信息
     *
     * @param models 待新增的部门信息
     * @return 受影响行数
     * @throws ServiceException 创建失败
     */
    int create(List<DepartmentCoreBean> models) throws ServiceException;

    /**
     * 修改部门信息
     *
     * @param model 待修改的内容
     * @param errorOnUnaffected 受影响行数为0时是否抛异常
     * @return 受影响行数
     * @throws ServiceException 修改失败
     */
    int update(DepartmentCoreUpdate model, boolean errorOnUnaffected) throws ServiceException;

    /**
     * 根据部门ID删除部门信息
     *
     * @param ids 待删除的部门信息的部门ID
     * @param errorOnRowsNotMatch 删除行数不匹配时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int deleteByIds(List<String> ids, boolean errorOnRowsNotMatch) throws ServiceException;

    /**
     * 根据部门编号删除部门信息
     *
     * @param deptCodes 待删除的部门编号
     * @param errorOnRowsNotMatch 删除行数不匹配时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int deleteByCodes(List<String> deptCodes, boolean errorOnRowsNotMatch) throws ServiceException;

    /**
     * 根据条件删除部门信息
     *
     * @param where 条件
     * @param errorOnUnaffected 删除行数为0时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int delete(DepartmentCoreWhere where, boolean errorOnUnaffected) throws ServiceException;

}
